package com.itbz.JSP;
/*
JSP介绍
        JSP(全称Java Server Pages)Java服务端页面技术，是JavaEE平台下的技术规范。它允许使用特定的标签在HTML网页中插入Java代码，实现动态页面处理，所以JSP就是HTML与Java代码的复合体。JSP技术可以快速的实现一个页面的开发，相比在Servlet中实现页面开发将变得更加容易。

        常见的视图层技术
        HTML、JSP、Thymeleaf等。

        前后端分离开发方式
        在前后端分离的项目中真正可以做到“术业有专攻”（开发人员分离） 。前后端分离开发方式中前端页面由专业团队完成页面的开发，并通过请求调用后端的api接口进行数据交互。在开发前端页面的团队中更多关注的技术如：html、CSS、jQuery、Vue、Nodejs等前端技术。前端追求的是：页面表现，速度流畅，兼容性，用户体验等等。而后端团队则更多的是业务的具体实现。在后端开发的团队中更多关注的技术如：设计模式、分布式架构、微服务架构、数据库的操作、Java的性能优化以及数据库优化等技术。前后端分离已成为互联网项目开发的业界标准使用方式，特别是为大型分布式架构、弹性计算架构、微服务架构、多端化服务（多种客户端，例如：浏览器，车载终端，安卓，IOS等等）打下坚实的基础。
*/
/*JSP技术特点
JSP和Servlet是本质相同的技术。当一个JSP文件第一次被请求时，
JSP引擎会将该JSP编译成一个Servlet，并执行这个Servlet。
如果JSP文件被修改了，那么JSP引擎会重新编译这个JSP。

JSP引擎对JSP编译时会生成两个文件分别是.java的源文件以及编译后的.class文件，
并放到Tomcat的work目录的Catalina对应的虚拟主机目录中的org\apache\jsp目录中。
两个文件的名称会使用JSP的名称加”_jsp”表示。如：index_jsp.java、index_jsp.class

JSP与Servlet区别
JSP以源文件形式部署到容器中。而Servlet需要编译成class文件后部署到容器中。
JSP部署到web项目的根目录下或根目录下的其他子目录和静态同资源位于相同位置。而Servlet需要部署到WEB-INF/classes目录中。
JSP中的HTML代码会被JSP引擎放入到Servlet的out.write()方法中。而在Servlet中我们需要自己通过对字符流输出流的操作生成响应的页面。
JSP更擅长表现于页面显示，Servlet更擅长于逻辑控制。*/


public class TestJsp00 {
    /*
    JSP的三种原始标签
    JSP的原始标签在JSP的任何版本中都可以使用。
    <%! %>   声明标签
    <% %>    脚本标签
    <%= %>   赋值标签
    */
/*
    <%! %> 声明标签
声明标签用于在JSP中定义成员变量与方法的定义。
标签中的内容会出现在JSP被编译后的Servlet的class的{}中。

<% %>脚本标签
标签里只可以写变量，if等逻辑语句  不可以写方法体  因为在java中不可以在方法体 编写方法体
脚本标签用于在JSP中编写业务逻辑。标签中的内容会出现在JSP被编译后的
Servlet的_jspService方法体中。

<%= %>赋值标签
赋值标签用于在JSP中做内容输出。标签中的内容会出现在_jspService方法
的out.print()方法的参数中。注意我们在使用赋值标签时不需要在代码中添加 ”；”。
因为在java参数中是没有 “ ; ”  因为print()方法中只有一个参数 所以不可以连写 <%=a,c%

*/

/*
JSP的指令标签
JSP指令标签的作用是声明JSP页面的一些属性和动作。
JSP指令标签分类
page指令标签： 位于JSP页面的顶端，可以有多个，主要声明JSP页面的一些属性
induce指令标签： 嵌入另一个JSP页面，同时解析这个JSP页面
taglib指令标签： 导入其它标签库


注意格式：属性与属性间是用空格键，值与值字间是 “ , ” 隔开
<%@指令名称 属性="值" 属性="值1,值2" 属性="值"...."%>
例：
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

Page指令标签
contentType
设置响应类型和编码。

pageEncoding
设置页面的编码。
当没有设置pageEncoding 但设置了contentType="text/html;charset=UTF-8"
那么面码的编码也是UTF-8

import
导入所需要的包。

language
当前JSP页面里面可以嵌套的语言。

session (默认true)  session="true/false"
设置JSP页面是否获取session内置对象。

buffer
设置JSP页面的流的缓冲区的大小。

autoFlush
是否自动刷新。

extends
声明当前JSP的页面继承于那个类.必须继承的是httpservlet 及其子类。

isELIgnored
是否忽略el表达式。

errorPage
当前JSP页面出现异常的时候要跳转到的JSP页面。

isErrorPage
当前JSP页面是否是一个错误页面。若值为true,可以使用JSP页面的一个内置对象
 exception。


Include指令标签
静态包含,可以将其他页面内容包含进来,一起进行编译运行.生成一个java文件.
<%@include file="被包含JSP的相对路径" %>


Taglib指令标签
导入标签库。
<%@taglib prefix="前缀名" uri="名称空间" %>
 */
}

/*JSP的内置对象
JSP中一共预先定义了9个这样的对象，分别为：
request、response、session、application、out、
pagecontext、config、page、exception。

request对象
request 对象是 HttpServletRequest类型的对象。

response对象
response 对象是 HttpServletResponse类型的对象。

session对象
session 对象是HttpSession类型的对象。只有在包含 session=“true” 的页面中才可以被使用。

application对象
application 对象是ServletContext类型的对象。

out 对象
out 对象是JspWriter类型的对象。

config 对象
config 对象是ServletConfig类型的对象。

pageContext 对象
pageContext 对象是PageContext类型的对象。作用是取得任何范围的参数，
通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。
pageContext对象的创建和初始化都是由容器来完成的，在JSP页面中可以直接
使用 pageContext对象。

page 对象
page 对象代表JSP本身。

exception 对象
exception 对象的作用是显示异常信息，只有在包含 isErrorPage="true" 的页面中才可以被使用。*/


/*JSP中的四大作用域对象
* 作用或：“数据共享的范围”，也就是说数据能够在多大的范围内有效
*
* 对象名称	        作用范围
application	        整个应用都有效
session	            在当前会话中有效
request	            在当前请求中有效
page	            在当前页面有效
*
*application 对象是ServletContext类型的对象  不存放业务数据（存取数据）
* 最常用的是request对象  生命周期最短 请求完就 销毁 保证查询的数据是最新
* session 一般是用户登录后，存放用户登录信息*/